   1              		.syntax unified
   2              		.cpu cortex-m3
   3              		.fpu softvfp
   4              		.eabi_attribute 20, 1
   5              		.eabi_attribute 21, 1
   6              		.eabi_attribute 23, 3
   7              		.eabi_attribute 24, 1
   8              		.eabi_attribute 25, 1
   9              		.eabi_attribute 26, 1
  10              		.eabi_attribute 30, 4
  11              		.eabi_attribute 34, 1
  12              		.eabi_attribute 18, 4
  13              		.thumb
  14              		.syntax unified
  15              		.file	"drivers.c"
  16              		.text
  17              	.Ltext0:
  18              		.cfi_sections	.debug_frame
  19              		.section	.text.onKeyDown,"ax",%progbits
  20              		.align	1
  21              		.global	onKeyDown
  22              		.thumb
  23              		.thumb_func
  25              	onKeyDown:
  26              	.LFB0:
  27              		.file 1 "drivers.c"
   1:drivers.c     **** #include "app.h"
   2:drivers.c     **** 
   3:drivers.c     **** // ################################################################################################
   4:drivers.c     **** // KEYBOARD
   5:drivers.c     **** // ################################################################################################
   6:drivers.c     **** void onKeyDown(char key) {
  28              		.loc 1 6 0
  29              		.cfi_startproc
  30              		@ args = 0, pretend = 0, frame = 0
  31              		@ frame_needed = 0, uses_anonymous_args = 0
  32              	.LVL0:
  33 0000 10B5     		push	{r4, lr}
  34              	.LCFI0:
  35              		.cfi_def_cfa_offset 8
  36              		.cfi_offset 4, -8
  37              		.cfi_offset 14, -4
  38              		.loc 1 6 0
  39 0002 0446     		mov	r4, r0
   7:drivers.c     **** 	lprintf("onKeyDown key [0x%x]"CMD_TERMINATOR, key);
  40              		.loc 1 7 0
  41 0004 0246     		mov	r2, r0
  42 0006 0A49     		ldr	r1, .L7
  43 0008 0120     		movs	r0, #1
  44              	.LVL1:
  45 000a FFF7FEFF 		bl	rprintf
  46              	.LVL2:
   8:drivers.c     **** 	if (key == SW0) beep_Play(4);
  47              		.loc 1 8 0
  48 000e 012C     		cmp	r4, #1
  49 0010 01D1     		bne	.L2
  50              		.loc 1 8 0 is_stmt 0 discriminator 1
  51 0012 0420     		movs	r0, #4
  52 0014 06E0     		b	.L5
  53              	.L2:
   9:drivers.c     **** 	else if (key == SW1) beep_Play(5);
  54              		.loc 1 9 0 is_stmt 1
  55 0016 022C     		cmp	r4, #2
  56 0018 01D1     		bne	.L3
  57              		.loc 1 9 0 is_stmt 0 discriminator 1
  58 001a 0520     		movs	r0, #5
  59 001c 02E0     		b	.L5
  60              	.L3:
  10:drivers.c     **** 	else if (key == SW2) beep_Play(6);
  61              		.loc 1 10 0 is_stmt 1
  62 001e 042C     		cmp	r4, #4
  63 0020 04D1     		bne	.L1
  64              		.loc 1 10 0 is_stmt 0 discriminator 1
  65 0022 0620     		movs	r0, #6
  66              	.L5:
  11:drivers.c     **** }
  67              		.loc 1 11 0 is_stmt 1 discriminator 1
  68 0024 BDE81040 		pop	{r4, lr}
  69              	.LCFI1:
  70              		.cfi_remember_state
  71              		.cfi_restore 14
  72              		.cfi_restore 4
  73              		.cfi_def_cfa_offset 0
  10:drivers.c     **** 	else if (key == SW2) beep_Play(6);
  74              		.loc 1 10 0 discriminator 1
  75 0028 FFF7FEBF 		b	beep_Play
  76              	.LVL3:
  77              	.L1:
  78              	.LCFI2:
  79              		.cfi_restore_state
  80 002c 10BD     		pop	{r4, pc}
  81              	.L8:
  82 002e 00BF     		.align	2
  83              	.L7:
  84 0030 00000000 		.word	.LC0
  85              		.cfi_endproc
  86              	.LFE0:
  88              		.section	.text.onKeyPress,"ax",%progbits
  89              		.align	1
  90              		.global	onKeyPress
  91              		.thumb
  92              		.thumb_func
  94              	onKeyPress:
  95              	.LFB1:
  12:drivers.c     **** 
  13:drivers.c     **** void onKeyPress(char key __attribute__ ((unused)) ) {
  96              		.loc 1 13 0
  97              		.cfi_startproc
  98              		@ args = 0, pretend = 0, frame = 0
  99              		@ frame_needed = 0, uses_anonymous_args = 0
 100              		@ link register save eliminated.
 101              	.LVL4:
  14:drivers.c     **** 	lprintf("onKeyPress key [0x%x] fastInc[%d] "CMD_TERMINATOR, key, gkey_FastInc);
 102              		.loc 1 14 0
 103 0000 034B     		ldr	r3, .L10
 104 0002 0246     		mov	r2, r0
 105 0004 1B68     		ldr	r3, [r3]
 106 0006 0349     		ldr	r1, .L10+4
 107 0008 0120     		movs	r0, #1
 108              	.LVL5:
 109 000a FFF7FEBF 		b	rprintf
 110              	.LVL6:
 111              	.L11:
 112 000e 00BF     		.align	2
 113              	.L10:
 114 0010 00000000 		.word	gkey_FastInc
 115 0014 16000000 		.word	.LC1
 116              		.cfi_endproc
 117              	.LFE1:
 119              		.section	.text.onKeyUp,"ax",%progbits
 120              		.align	1
 121              		.global	onKeyUp
 122              		.thumb
 123              		.thumb_func
 125              	onKeyUp:
 126              	.LFB2:
  15:drivers.c     **** }
  16:drivers.c     **** 
  17:drivers.c     **** void onKeyUp(char key __attribute__ ((unused)) ) {
 127              		.loc 1 17 0
 128              		.cfi_startproc
 129              		@ args = 0, pretend = 0, frame = 0
 130              		@ frame_needed = 0, uses_anonymous_args = 0
 131              		@ link register save eliminated.
 132              	.LVL7:
  18:drivers.c     **** 	lprintf("onKeyUp key [0x%x] fastInc[%d] "CMD_TERMINATOR, key, gkey_FastInc);
 133              		.loc 1 18 0
 134 0000 034B     		ldr	r3, .L13
 135 0002 0246     		mov	r2, r0
 136 0004 1B68     		ldr	r3, [r3]
 137 0006 0349     		ldr	r1, .L13+4
 138 0008 0120     		movs	r0, #1
 139              	.LVL8:
 140 000a FFF7FEBF 		b	rprintf
 141              	.LVL9:
 142              	.L14:
 143 000e 00BF     		.align	2
 144              	.L13:
 145 0010 00000000 		.word	gkey_FastInc
 146 0014 3A000000 		.word	.LC2
 147              		.cfi_endproc
 148              	.LFE2:
 150              		.section	.text.relay_Init,"ax",%progbits
 151              		.align	1
 152              		.global	relay_Init
 153              		.thumb
 154              		.thumb_func
 156              	relay_Init:
 157              	.LFB3:
  19:drivers.c     **** }
  20:drivers.c     **** 
  21:drivers.c     **** // ################################################################################################
  22:drivers.c     **** // RELAYS
  23:drivers.c     **** // ################################################################################################
  24:drivers.c     **** void relay_Init(void) {
 158              		.loc 1 24 0
 159              		.cfi_startproc
 160              		@ args = 0, pretend = 0, frame = 0
 161              		@ frame_needed = 0, uses_anonymous_args = 0
 162              		@ link register save eliminated.
  25:drivers.c     **** 	relay1_Init();
 163              		.loc 1 25 0
 164 0000 094B     		ldr	r3, .L16
 165 0002 1A68     		ldr	r2, [r3]
 166 0004 42F08042 		orr	r2, r2, #1073741824
 167 0008 1A60     		str	r2, [r3]
  26:drivers.c     **** 	relay2_Init();
 168              		.loc 1 26 0
 169 000a 1A68     		ldr	r2, [r3]
 170 000c 42F00042 		orr	r2, r2, #-2147483648
 171 0010 1A60     		str	r2, [r3]
  27:drivers.c     **** 
  28:drivers.c     **** 	control.relay1.st = 0;
 172              		.loc 1 28 0
 173 0012 064B     		ldr	r3, .L16+4
 174 0014 0022     		movs	r2, #0
  29:drivers.c     **** 	control.relay1.timeout = 0;
 175              		.loc 1 29 0
 176 0016 C3F8A020 		str	r2, [r3, #160]
  28:drivers.c     **** 	control.relay1.timeout = 0;
 177              		.loc 1 28 0
 178 001a C3F89C20 		str	r2, [r3, #156]
  30:drivers.c     **** 
  31:drivers.c     **** 	control.relay2.st = 0;
 179              		.loc 1 31 0
 180 001e C3F8A420 		str	r2, [r3, #164]
  32:drivers.c     **** 	control.relay2.timeout = 0;
 181              		.loc 1 32 0
 182 0022 C3F8A820 		str	r2, [r3, #168]
 183 0026 7047     		bx	lr
 184              	.L17:
 185              		.align	2
 186              	.L16:
 187 0028 20C00920 		.word	537509920
 188 002c 00000000 		.word	control
 189              		.cfi_endproc
 190              	.LFE3:
 192              		.section	.text.relay_Set,"ax",%progbits
 193              		.align	1
 194              		.global	relay_Set
 195              		.thumb
 196              		.thumb_func
 198              	relay_Set:
 199              	.LFB4:
  33:drivers.c     **** }
  34:drivers.c     **** 
  35:drivers.c     **** // Liga ou desliga o rele
  36:drivers.c     **** //	parametro rly: sinaliza qual o rele vamos acessar. valor 0 ou 1
  37:drivers.c     **** //	parametro st: pdON liga o rele e pdOFF desliga o rele;
  38:drivers.c     **** //	parametro timeout: O tempo em segundos que o rele vai ficar no estado atual e voltar para o esta
  39:drivers.c     **** //		Se colocar valor 0, permanece no estado atual até o próximo comando
  40:drivers.c     **** int relay_Set(int rly, int st, uint timeout) {
 200              		.loc 1 40 0
 201              		.cfi_startproc
 202              		@ args = 0, pretend = 0, frame = 0
 203              		@ frame_needed = 0, uses_anonymous_args = 0
 204              	.LVL10:
  41:drivers.c     **** 	pRelay rl;
  42:drivers.c     **** 
  43:drivers.c     **** 	if ( (rly < 0) || (rly > 1) ) return errDEVICE_NOT_FOUND;
 205              		.loc 1 43 0
 206 0000 0128     		cmp	r0, #1
  40:drivers.c     **** 	pRelay rl;
 207              		.loc 1 40 0
 208 0002 10B5     		push	{r4, lr}
 209              	.LCFI3:
 210              		.cfi_def_cfa_offset 8
 211              		.cfi_offset 4, -8
 212              		.cfi_offset 14, -4
 213              		.loc 1 43 0
 214 0004 0DD8     		bhi	.L21
  44:drivers.c     **** 	if (rly == 0) rl = &control.relay1; else rl = &control.relay2;
 215              		.loc 1 44 0
 216 0006 084B     		ldr	r3, .L23
 217 0008 03F10804 		add	r4, r3, #8
 218 000c 0028     		cmp	r0, #0
 219 000e 0CBF     		ite	eq
 220 0010 1846     		moveq	r0, r3
 221 0012 2046     		movne	r0, r4
 222              	.LVL11:
  45:drivers.c     **** 
  46:drivers.c     **** 	rl->timeout = timeout*1000;
 223              		.loc 1 46 0
 224 0014 4FF47A73 		mov	r3, #1000
 225 0018 5A43     		muls	r2, r3, r2
 226              	.LVL12:
  47:drivers.c     **** 	rl->st = st;
 227              		.loc 1 47 0
 228 001a 0160     		str	r1, [r0]
  46:drivers.c     **** 	rl->st = st;
 229              		.loc 1 46 0
 230 001c 4260     		str	r2, [r0, #4]
  48:drivers.c     **** 
  49:drivers.c     **** 	return pdPASS;
 231              		.loc 1 49 0
 232 001e 0120     		movs	r0, #1
 233              	.LVL13:
 234 0020 10BD     		pop	{r4, pc}
 235              	.LVL14:
 236              	.L21:
  43:drivers.c     **** 	if (rly == 0) rl = &control.relay1; else rl = &control.relay2;
 237              		.loc 1 43 0
 238 0022 0248     		ldr	r0, .L23+4
 239              	.LVL15:
  50:drivers.c     **** }
 240              		.loc 1 50 0
 241 0024 10BD     		pop	{r4, pc}
 242              	.L24:
 243 0026 00BF     		.align	2
 244              	.L23:
 245 0028 9C000000 		.word	control+156
 246 002c D4FEFFFF 		.word	-300
 247              		.cfi_endproc
 248              	.LFE4:
 250              		.section	.text.relay_Tick,"ax",%progbits
 251              		.align	1
 252              		.global	relay_Tick
 253              		.thumb
 254              		.thumb_func
 256              	relay_Tick:
 257              	.LFB5:
  51:drivers.c     **** 
  52:drivers.c     **** void relay_Tick(void) {
 258              		.loc 1 52 0
 259              		.cfi_startproc
 260              		@ args = 0, pretend = 0, frame = 0
 261              		@ frame_needed = 0, uses_anonymous_args = 0
  53:drivers.c     **** 	if (control.relay1.st) relay1_On(); else relay1_Off();
 262              		.loc 1 53 0
 263 0000 1C4B     		ldr	r3, .L42
  52:drivers.c     **** 	if (control.relay1.st) relay1_On(); else relay1_Off();
 264              		.loc 1 52 0
 265 0002 10B5     		push	{r4, lr}
 266              	.LCFI4:
 267              		.cfi_def_cfa_offset 8
 268              		.cfi_offset 4, -8
 269              		.cfi_offset 14, -4
 270              		.loc 1 53 0
 271 0004 D3F89C10 		ldr	r1, [r3, #156]
 272 0008 4FF08042 		mov	r2, #1073741824
 273 000c 09B1     		cbz	r1, .L26
 274              		.loc 1 53 0 is_stmt 0 discriminator 1
 275 000e 1A48     		ldr	r0, .L42+4
 276 0010 00E0     		b	.L40
 277              	.L26:
 278              		.loc 1 53 0 discriminator 2
 279 0012 1A48     		ldr	r0, .L42+8
 280              	.L40:
 281 0014 0260     		str	r2, [r0]
  54:drivers.c     **** 	if (control.relay2.st) relay2_On(); else relay2_Off();
 282              		.loc 1 54 0 is_stmt 1 discriminator 2
 283 0016 D3F8A420 		ldr	r2, [r3, #164]
 284 001a 4FF00040 		mov	r0, #-2147483648
 285 001e 0AB1     		cbz	r2, .L28
 286              		.loc 1 54 0 is_stmt 0 discriminator 1
 287 0020 154C     		ldr	r4, .L42+4
 288 0022 00E0     		b	.L41
 289              	.L28:
 290              		.loc 1 54 0 discriminator 2
 291 0024 154C     		ldr	r4, .L42+8
 292              	.L41:
 293 0026 2060     		str	r0, [r4]
  55:drivers.c     **** 	if (control.relay1.timeout > 0) control.relay1.timeout--;
 294              		.loc 1 55 0 is_stmt 1 discriminator 2
 295 0028 D3F8A000 		ldr	r0, [r3, #160]
 296 002c 114C     		ldr	r4, .L42
 297 002e 20B1     		cbz	r0, .L30
 298              		.loc 1 55 0 is_stmt 0 discriminator 1
 299 0030 D4F8A000 		ldr	r0, [r4, #160]
 300 0034 0138     		subs	r0, r0, #1
 301 0036 C4F8A000 		str	r0, [r4, #160]
 302              	.L30:
  56:drivers.c     **** 	if (control.relay2.timeout > 0) control.relay2.timeout--;
 303              		.loc 1 56 0 is_stmt 1
 304 003a D3F8A800 		ldr	r0, [r3, #168]
 305 003e 0D4C     		ldr	r4, .L42
 306 0040 20B1     		cbz	r0, .L31
 307              		.loc 1 56 0 is_stmt 0 discriminator 1
 308 0042 D4F8A800 		ldr	r0, [r4, #168]
 309 0046 0138     		subs	r0, r0, #1
 310 0048 C4F8A800 		str	r0, [r4, #168]
 311              	.L31:
  57:drivers.c     **** 	//colocar depois do acionamento para que seja certinho a contagem dos tempos
  58:drivers.c     **** 	if (control.relay1.timeout == 1) control.relay1.st ^= 1;
 312              		.loc 1 58 0 is_stmt 1
 313 004c D3F8A000 		ldr	r0, [r3, #160]
  59:drivers.c     **** 	if (control.relay2.timeout == 1) control.relay2.st ^= 1;
 314              		.loc 1 59 0
 315 0050 D3F8A830 		ldr	r3, [r3, #168]
  58:drivers.c     **** 	if (control.relay2.timeout == 1) control.relay2.st ^= 1;
 316              		.loc 1 58 0
 317 0054 0128     		cmp	r0, #1
 318 0056 02BF     		ittt	eq
 319 0058 0648     		ldreq	r0, .L42
 320 005a 81F00101 		eoreq	r1, r1, #1
 321 005e C0F89C10 		streq	r1, [r0, #156]
 322              		.loc 1 59 0
 323 0062 012B     		cmp	r3, #1
 324 0064 02BF     		ittt	eq
 325 0066 034B     		ldreq	r3, .L42
 326 0068 82F00102 		eoreq	r2, r2, #1
 327 006c C3F8A420 		streq	r2, [r3, #164]
 328 0070 10BD     		pop	{r4, pc}
 329              	.L43:
 330 0072 00BF     		.align	2
 331              	.L42:
 332 0074 00000000 		.word	control
 333 0078 38C00920 		.word	537509944
 334 007c 3CC00920 		.word	537509948
 335              		.cfi_endproc
 336              	.LFE5:
 338              		.section	.text.servo_Config,"ax",%progbits
 339              		.align	1
 340              		.global	servo_Config
 341              		.thumb
 342              		.thumb_func
 344              	servo_Config:
 345              	.LFB7:
  60:drivers.c     **** }
  61:drivers.c     **** 
  62:drivers.c     **** // ################################################################################################
  63:drivers.c     **** // SERVOS
  64:drivers.c     **** // ################################################################################################
  65:drivers.c     **** volatile uint servosTick = 0;
  66:drivers.c     **** void servo_Init(void) {
  67:drivers.c     **** 	servo_Parking();
  68:drivers.c     **** }
  69:drivers.c     **** 
  70:drivers.c     **** // podemos acionar o servo de modo que a posição ou movimento se faz de modo direto ou progressivo 
  71:drivers.c     **** //	servo: o servo alvo para posicionamento, valor de 1 a 7
  72:drivers.c     **** // offset: deve ser multiplo de 10
  73:drivers.c     **** // tp (ms). Valor 0: não há modo progressivo para o servo. Valor > 0 faz modo progressivo
  74:drivers.c     **** // toff: tempo em segundos que o servo vai ficar ativo. Valor 0 sinaliza ficar ligado direto
  75:drivers.c     **** int servo_Config(uint servo, uint init, uint min, uint max, int offset, int tp, int toff) {
 346              		.loc 1 75 0
 347              		.cfi_startproc
 348              		@ args = 12, pretend = 0, frame = 0
 349              		@ frame_needed = 0, uses_anonymous_args = 0
 350              	.LVL16:
 351 0000 F8B5     		push	{r3, r4, r5, r6, r7, lr}
 352              	.LCFI5:
 353              		.cfi_def_cfa_offset 24
 354              		.cfi_offset 3, -24
 355              		.cfi_offset 4, -20
 356              		.cfi_offset 5, -16
 357              		.cfi_offset 6, -12
 358              		.cfi_offset 7, -8
 359              		.cfi_offset 14, -4
  76:drivers.c     **** 	if ( (servo == 0) || (servo > SERVO_N_MODULE) ) return errDEVICE_NOT_FOUND;
 360              		.loc 1 76 0
 361 0002 451E     		subs	r5, r0, #1
 362 0004 062D     		cmp	r5, #6
  75:drivers.c     **** 	if ( (servo == 0) || (servo > SERVO_N_MODULE) ) return errDEVICE_NOT_FOUND;
 363              		.loc 1 75 0
 364 0006 069F     		ldr	r7, [sp, #24]
 365              		.loc 1 76 0
 366 0008 3AD8     		bhi	.L48
  77:drivers.c     **** 	if ( (offset<minOFFSET_US) || (offset>maxOFFSET_US) ) return errDEVICE_VALUE_INVALID;
 367              		.loc 1 77 0
 368 000a 40F6B834 		movw	r4, #3000
 369 000e 07F2DC56 		addw	r6, r7, #1500
 370 0012 A642     		cmp	r6, r4
 371 0014 36D8     		bhi	.L53
  78:drivers.c     **** 	if ( (init<minSERVO_US) || (init>maxSERVO_US) ) return errDEVICE_VALUE_INVALID;
 372              		.loc 1 78 0
 373 0016 40F65436 		movw	r6, #2900
 374 001a A1F1640E 		sub	lr, r1, #100
 375 001e B645     		cmp	lr, r6
 376 0020 30D8     		bhi	.L53
  79:drivers.c     **** 	if ( (min<minSERVO_US) || (min>maxSERVO_US) ) return errDEVICE_VALUE_INVALID;
 377              		.loc 1 79 0
 378 0022 A2F1640E 		sub	lr, r2, #100
 379 0026 B645     		cmp	lr, r6
 380 0028 2CD8     		bhi	.L53
  80:drivers.c     **** 	if ( (max<=min) || (max>maxSERVO_US) ) return errDEVICE_VALUE_INVALID;
 381              		.loc 1 80 0
 382 002a 9A42     		cmp	r2, r3
 383 002c 2AD2     		bcs	.L53
 384              		.loc 1 80 0 is_stmt 0 discriminator 2
 385 002e A342     		cmp	r3, r4
 386 0030 28D8     		bhi	.L53
 387              	.LVL17:
  81:drivers.c     **** 
  82:drivers.c     **** 	if(tp<0) tp=0;
  83:drivers.c     **** 	if(toff<0) toff=0;
  84:drivers.c     **** 
  85:drivers.c     **** 	tParServo* parServo = (tParServo*)control.servo[servo-1].par;
  86:drivers.c     **** 	parServo->offset = (offset/10)*10;// deve ser multiplo de 10 por causa do timer progresse em 10 em
 388              		.loc 1 86 0 is_stmt 1
 389 0032 0A26     		movs	r6, #10
 390 0034 97FBF6F7 		sdiv	r7, r7, r6
  85:drivers.c     **** 	parServo->offset = (offset/10)*10;// deve ser multiplo de 10 por causa do timer progresse em 10 em
 391              		.loc 1 85 0
 392 0038 1C24     		movs	r4, #28
 393 003a 6C43     		muls	r4, r5, r4
 394 003c DFF850E0 		ldr	lr, .L57+4
 395              		.loc 1 86 0
 396 0040 7E43     		muls	r6, r7, r6
  85:drivers.c     **** 	parServo->offset = (offset/10)*10;// deve ser multiplo de 10 por causa do timer progresse em 10 em
 397              		.loc 1 85 0
 398 0042 A834     		adds	r4, r4, #168
 399 0044 7444     		add	r4, r4, lr
 400 0046 04F10805 		add	r5, r4, #8
 401              	.LVL18:
 402              		.loc 1 86 0
 403 004a A660     		str	r6, [r4, #8]
  87:drivers.c     **** 	parServo->min = min;
  88:drivers.c     **** 	parServo->max = max;
 404              		.loc 1 88 0
 405 004c EB60     		str	r3, [r5, #12]
  89:drivers.c     **** 	parServo->timeProgress = tp;
 406              		.loc 1 89 0
 407 004e 079B     		ldr	r3, [sp, #28]
 408              	.LVL19:
  90:drivers.c     **** 	parServo->timeActiveOff = toff;
  91:drivers.c     **** 
  92:drivers.c     **** 	// o servo 3 é o espelho do servo 2
  93:drivers.c     **** 	if (servo == 2)	{
 409              		.loc 1 93 0
 410 0050 0228     		cmp	r0, #2
  89:drivers.c     **** 	parServo->timeProgress = tp;
 411              		.loc 1 89 0
 412 0052 23EAE373 		bic	r3, r3, r3, asr #31
 413              	.LVL20:
 414 0056 6B61     		str	r3, [r5, #20]
  90:drivers.c     **** 	parServo->timeActiveOff = toff;
 415              		.loc 1 90 0
 416 0058 089B     		ldr	r3, [sp, #32]
 417              	.LVL21:
  87:drivers.c     **** 	parServo->max = max;
 418              		.loc 1 87 0
 419 005a AA60     		str	r2, [r5, #8]
  90:drivers.c     **** 	parServo->timeActiveOff = toff;
 420              		.loc 1 90 0
 421 005c 23EAE373 		bic	r3, r3, r3, asr #31
 422              	.LVL22:
 423 0060 2B61     		str	r3, [r5, #16]
 424              		.loc 1 93 0
 425 0062 06D1     		bne	.L46
  94:drivers.c     **** 		parServo->init = init;
 426              		.loc 1 94 0
 427 0064 6960     		str	r1, [r5, #4]
 428              	.LVL23:
  95:drivers.c     **** 		parServo = (tParServo*)control.servo[servo].par;
  96:drivers.c     **** 		parServo->init = (1500-(init-1500));
 429              		.loc 1 96 0
 430 0066 C1F53B61 		rsb	r1, r1, #2992
 431              	.LVL24:
 432 006a 0831     		adds	r1, r1, #8
 433 006c CEF8EC10 		str	r1, [lr, #236]
 434              	.LVL25:
 435 0070 02E0     		b	.L47
 436              	.LVL26:
 437              	.L46:
  97:drivers.c     **** 	} else if (servo != 3)
 438              		.loc 1 97 0
 439 0072 0328     		cmp	r0, #3
  98:drivers.c     **** 		parServo->init = init;
 440              		.loc 1 98 0
 441 0074 18BF     		it	ne
 442 0076 6960     		strne	r1, [r5, #4]
 443              	.LVL27:
 444              	.L47:
  99:drivers.c     **** 
 100:drivers.c     **** 	flash_Save();
 445              		.loc 1 100 0
 446 0078 FFF7FEFF 		bl	flash_Save
 447              	.LVL28:
 101:drivers.c     **** 
 102:drivers.c     **** 	return pdPASS;
 448              		.loc 1 102 0
 449 007c 0120     		movs	r0, #1
 450 007e F8BD     		pop	{r3, r4, r5, r6, r7, pc}
 451              	.LVL29:
 452              	.L48:
  76:drivers.c     **** 	if ( (offset<minOFFSET_US) || (offset>maxOFFSET_US) ) return errDEVICE_VALUE_INVALID;
 453              		.loc 1 76 0
 454 0080 0248     		ldr	r0, .L57
 455              	.LVL30:
 456 0082 F8BD     		pop	{r3, r4, r5, r6, r7, pc}
 457              	.LVL31:
 458              	.L53:
  77:drivers.c     **** 	if ( (init<minSERVO_US) || (init>maxSERVO_US) ) return errDEVICE_VALUE_INVALID;
 459              		.loc 1 77 0
 460 0084 6FF49770 		mvn	r0, #302
 461              	.LVL32:
 103:drivers.c     **** }
 462              		.loc 1 103 0
 463 0088 F8BD     		pop	{r3, r4, r5, r6, r7, pc}
 464              	.LVL33:
 465              	.L58:
 466 008a 00BF     		.align	2
 467              	.L57:
 468 008c D4FEFFFF 		.word	-300
 469 0090 00000000 		.word	control
 470              		.cfi_endproc
 471              	.LFE7:
 473              		.section	.text.servo_Offset,"ax",%progbits
 474              		.align	1
 475              		.global	servo_Offset
 476              		.thumb
 477              		.thumb_func
 479              	servo_Offset:
 480              	.LFB8:
 104:drivers.c     **** 
 105:drivers.c     **** // podemos acionar o servo de modo que a posição ou movimento se faz de modo direto ou progressivo 
 106:drivers.c     **** //	servo: o servo alvo para posicionamento, valor de 1 a 7
 107:drivers.c     **** // offset: deve ser multiplo de 10
 108:drivers.c     **** int servo_Offset(uint servo, int offset) {
 481              		.loc 1 108 0
 482              		.cfi_startproc
 483              		@ args = 0, pretend = 0, frame = 0
 484              		@ frame_needed = 0, uses_anonymous_args = 0
 485              	.LVL34:
 109:drivers.c     **** 	if ( (servo == 0) || (servo > SERVO_N_MODULE) ) return errDEVICE_NOT_FOUND;
 486              		.loc 1 109 0
 487 0000 0138     		subs	r0, r0, #1
 488              	.LVL35:
 489 0002 0628     		cmp	r0, #6
 108:drivers.c     **** 	if ( (servo == 0) || (servo > SERVO_N_MODULE) ) return errDEVICE_NOT_FOUND;
 490              		.loc 1 108 0
 491 0004 08B5     		push	{r3, lr}
 492              	.LCFI6:
 493              		.cfi_def_cfa_offset 8
 494              		.cfi_offset 3, -8
 495              		.cfi_offset 14, -4
 496              		.loc 1 109 0
 497 0006 12D8     		bhi	.L61
 110:drivers.c     **** 	if ( (offset<minOFFSET_US) || (offset>maxOFFSET_US) ) return errDEVICE_VALUE_INVALID;
 498              		.loc 1 110 0
 499 0008 40F6B833 		movw	r3, #3000
 500 000c 01F2DC52 		addw	r2, r1, #1500
 501 0010 9A42     		cmp	r2, r3
 502 0012 0ED8     		bhi	.L62
 503              	.LVL36:
 111:drivers.c     **** 
 112:drivers.c     **** 	tParServo* parServo = (tParServo*)control.servo[servo-1].par;
 504              		.loc 1 112 0
 505 0014 1C23     		movs	r3, #28
 506 0016 5843     		muls	r0, r3, r0
 507              	.LVL37:
 113:drivers.c     **** 	parServo->offset = (offset/10)*10;// deve ser multiplo de 10 por causa do time progresse em 10 em 
 508              		.loc 1 113 0
 509 0018 0A23     		movs	r3, #10
 510 001a 91FBF3F1 		sdiv	r1, r1, r3
 511              	.LVL38:
 512 001e 4B43     		muls	r3, r1, r3
 513 0020 054A     		ldr	r2, .L63
 514              	.LVL39:
 112:drivers.c     **** 	parServo->offset = (offset/10)*10;// deve ser multiplo de 10 por causa do time progresse em 10 em 
 515              		.loc 1 112 0
 516 0022 A830     		adds	r0, r0, #168
 517              		.loc 1 113 0
 518 0024 8350     		str	r3, [r0, r2]
 114:drivers.c     **** 	flash_Save();
 519              		.loc 1 114 0
 520 0026 FFF7FEFF 		bl	flash_Save
 521              	.LVL40:
 115:drivers.c     **** 
 116:drivers.c     **** 	return pdPASS;
 522              		.loc 1 116 0
 523 002a 0120     		movs	r0, #1
 524 002c 08BD     		pop	{r3, pc}
 525              	.LVL41:
 526              	.L61:
 109:drivers.c     **** 	if ( (offset<minOFFSET_US) || (offset>maxOFFSET_US) ) return errDEVICE_VALUE_INVALID;
 527              		.loc 1 109 0
 528 002e 0348     		ldr	r0, .L63+4
 529 0030 08BD     		pop	{r3, pc}
 530              	.L62:
 110:drivers.c     **** 
 531              		.loc 1 110 0
 532 0032 6FF49770 		mvn	r0, #302
 117:drivers.c     **** }
 533              		.loc 1 117 0
 534 0036 08BD     		pop	{r3, pc}
 535              	.L64:
 536              		.align	2
 537              	.L63:
 538 0038 08000000 		.word	control+8
 539 003c D4FEFFFF 		.word	-300
 540              		.cfi_endproc
 541              	.LFE8:
 543              		.section	.text.servo_SetPos,"ax",%progbits
 544              		.align	1
 545              		.global	servo_SetPos
 546              		.thumb
 547              		.thumb_func
 549              	servo_SetPos:
 550              	.LFB9:
 118:drivers.c     **** 
 119:drivers.c     **** // Ajusta o posicionamento do servo desejado
 120:drivers.c     **** //	servo: o servo alvo para posicionamento, valor de 1 a 7
 121:drivers.c     **** //  us: largura do pulso em microsegundos de controle de posição do servos. Valor entre 100 a 3000u
 122:drivers.c     **** int servo_SetPos(uint servo, uint us) {
 551              		.loc 1 122 0
 552              		.cfi_startproc
 553              		@ args = 0, pretend = 0, frame = 0
 554              		@ frame_needed = 0, uses_anonymous_args = 0
 555              	.LVL42:
 556 0000 F8B5     		push	{r3, r4, r5, r6, r7, lr}
 557              	.LCFI7:
 558              		.cfi_def_cfa_offset 24
 559              		.cfi_offset 3, -24
 560              		.cfi_offset 4, -20
 561              		.cfi_offset 5, -16
 562              		.cfi_offset 6, -12
 563              		.cfi_offset 7, -8
 564              		.cfi_offset 14, -4
 123:drivers.c     **** 	if ( (servo==0) || (servo>SERVO_N_MODULE) ) return errDEVICE_NOT_FOUND;
 565              		.loc 1 123 0
 566 0002 441E     		subs	r4, r0, #1
 567 0004 062C     		cmp	r4, #6
 122:drivers.c     **** 	if ( (servo==0) || (servo>SERVO_N_MODULE) ) return errDEVICE_NOT_FOUND;
 568              		.loc 1 122 0
 569 0006 0646     		mov	r6, r0
 570              		.loc 1 123 0
 571 0008 31D8     		bhi	.L69
 124:drivers.c     **** 	tParServo* parServo = (tParServo*)control.servo[servo-1].par;
 572              		.loc 1 124 0
 573 000a 1C23     		movs	r3, #28
 574 000c 5C43     		muls	r4, r3, r4
 575 000e 1B4F     		ldr	r7, .L74
 576 0010 04F1A805 		add	r5, r4, #168
 577 0014 3D44     		add	r5, r5, r7
 578              	.LVL43:
 125:drivers.c     **** 	if ( (us<(uint)parServo->min) || (us > (uint)parServo->max) ) return errDEVICE_VALUE_OUT_OF_RANGE;
 579              		.loc 1 125 0
 580 0016 2A69     		ldr	r2, [r5, #16]
 581 0018 8A42     		cmp	r2, r1
 582 001a 2AD8     		bhi	.L71
 583              		.loc 1 125 0 is_stmt 0 discriminator 2
 584 001c 6B69     		ldr	r3, [r5, #20]
 585 001e 9942     		cmp	r1, r3
 586 0020 27D8     		bhi	.L71
 126:drivers.c     **** 	if ( (us<minSERVO_US) || (us>maxSERVO_US)) return errDEVICE_VALUE_INVALID;
 587              		.loc 1 126 0 is_stmt 1
 588 0022 40F65433 		movw	r3, #2900
 589 0026 A1F16402 		sub	r2, r1, #100
 590 002a 9A42     		cmp	r2, r3
 591 002c 23D8     		bhi	.L72
 127:drivers.c     **** 
 128:drivers.c     **** 	// o servo 3 será o espelho do servo 2
 129:drivers.c     **** 	if (servo == 3) return pdPASS;
 592              		.loc 1 129 0
 593 002e 0328     		cmp	r0, #3
 594 0030 1BD0     		beq	.L73
 130:drivers.c     **** 	control.servo[servo-1].posNew = us + parServo->offset;
 595              		.loc 1 130 0
 596 0032 AB68     		ldr	r3, [r5, #8]
 597 0034 3C44     		add	r4, r4, r7
 598 0036 1944     		add	r1, r1, r3
 599              	.LVL44:
 600 0038 C4F8AC10 		str	r1, [r4, #172]
 131:drivers.c     **** 	servus_SetPos(servo, control.servo[servo-1].posNew);
 601              		.loc 1 131 0
 602 003c FFF7FEFF 		bl	servus_SetPos
 603              	.LVL45:
 132:drivers.c     **** 
 133:drivers.c     **** 	servus_Enable(servo, 1); // Liga o servo
 604              		.loc 1 133 0
 605 0040 0121     		movs	r1, #1
 606 0042 3046     		mov	r0, r6
 607 0044 FFF7FEFF 		bl	servus_Enable
 608              	.LVL46:
 134:drivers.c     **** 
 135:drivers.c     **** 	// o servo 3 será o espelho do servo 2
 136:drivers.c     **** 	if (servo == 2) {
 609              		.loc 1 136 0
 610 0048 022E     		cmp	r6, #2
 611 004a 0ED1     		bne	.L73
 612              	.LVL47:
 137:drivers.c     **** 		us = control.servo[servo-1].posNew;
 138:drivers.c     **** 		control.servo[servo].posNew = (1500-(us-1500));
 139:drivers.c     **** 		control.servo[servo].posNew+=parServo->offset;
 613              		.loc 1 139 0
 614 004c AB68     		ldr	r3, [r5, #8]
 615 004e D4F8AC10 		ldr	r1, [r4, #172]
 140:drivers.c     **** 		parServo = (tParServo*)control.servo[servo].par;
 141:drivers.c     **** 		servus_SetPos(servo+1, control.servo[servo].posNew);
 616              		.loc 1 141 0
 617 0052 0320     		movs	r0, #3
 139:drivers.c     **** 		parServo = (tParServo*)control.servo[servo].par;
 618              		.loc 1 139 0
 619 0054 591A     		subs	r1, r3, r1
 620 0056 01F6B831 		addw	r1, r1, #3000
 621 005a C7F8E410 		str	r1, [r7, #228]
 622              	.LVL48:
 623              		.loc 1 141 0
 624 005e FFF7FEFF 		bl	servus_SetPos
 625              	.LVL49:
 142:drivers.c     **** 		servus_Enable(servo+1, 1); // Liga o servo
 626              		.loc 1 142 0
 627 0062 0121     		movs	r1, #1
 628 0064 0320     		movs	r0, #3
 629 0066 FFF7FEFF 		bl	servus_Enable
 630              	.LVL50:
 631              	.L73:
 143:drivers.c     **** 	};
 144:drivers.c     **** 
 145:drivers.c     **** 	return pdPASS;
 632              		.loc 1 145 0
 633 006a 0120     		movs	r0, #1
 634 006c F8BD     		pop	{r3, r4, r5, r6, r7, pc}
 635              	.LVL51:
 636              	.L69:
 123:drivers.c     **** 	tParServo* parServo = (tParServo*)control.servo[servo-1].par;
 637              		.loc 1 123 0
 638 006e 0448     		ldr	r0, .L74+4
 639              	.LVL52:
 640 0070 F8BD     		pop	{r3, r4, r5, r6, r7, pc}
 641              	.LVL53:
 642              	.L71:
 125:drivers.c     **** 	if ( (us<minSERVO_US) || (us>maxSERVO_US)) return errDEVICE_VALUE_INVALID;
 643              		.loc 1 125 0
 644 0072 0448     		ldr	r0, .L74+8
 645              	.LVL54:
 646 0074 F8BD     		pop	{r3, r4, r5, r6, r7, pc}
 647              	.LVL55:
 648              	.L72:
 126:drivers.c     **** 
 649              		.loc 1 126 0
 650 0076 6FF49770 		mvn	r0, #302
 651              	.LVL56:
 146:drivers.c     **** }
 652              		.loc 1 146 0
 653 007a F8BD     		pop	{r3, r4, r5, r6, r7, pc}
 654              	.LVL57:
 655              	.L75:
 656              		.align	2
 657              	.L74:
 658 007c 00000000 		.word	control
 659 0080 D4FEFFFF 		.word	-300
 660 0084 D0FEFFFF 		.word	-304
 661              		.cfi_endproc
 662              	.LFE9:
 664              		.section	.text.servo_Hand,"ax",%progbits
 665              		.align	1
 666              		.global	servo_Hand
 667              		.thumb
 668              		.thumb_func
 670              	servo_Hand:
 671              	.LFB11:
 147:drivers.c     **** 
 148:drivers.c     **** void servo_Parking(void) {
 149:drivers.c     **** 	tParServo* parServo;
 150:drivers.c     **** 	uint x;	for (x=0;x<SERVO_N_MODULE;x++) {
 151:drivers.c     **** 		parServo = (tParServo*)control.servo[x].par;
 152:drivers.c     **** 		control.servo[x].posNew = parServo->init+parServo->offset;
 153:drivers.c     **** 		servus_SetPos(x+1, control.servo[x].posNew);
 154:drivers.c     **** 		servus_Enable(x+1, 1); // Liga o servo
 155:drivers.c     **** 	}
 156:drivers.c     **** 
 157:drivers.c     **** 	servo_Hand(handOPEN);
 158:drivers.c     **** }
 159:drivers.c     **** 
 160:drivers.c     **** void servo_Hand(int act) {
 672              		.loc 1 160 0
 673              		.cfi_startproc
 674              		@ args = 0, pretend = 0, frame = 0
 675              		@ frame_needed = 0, uses_anonymous_args = 0
 676              		@ link register save eliminated.
 677              	.LVL58:
 678 0000 044B     		ldr	r3, .L79
 679              	.LVL59:
 161:drivers.c     **** 	tParServo* parServo = (tParServo*)control.servo[6].par;
 162:drivers.c     **** 	if (act == handCLOSE) servo_SetPos(7, parServo->max);
 680              		.loc 1 162 0
 681 0002 0128     		cmp	r0, #1
 682              	.LBB4:
 683              	.LBB5:
 684 0004 0CBF     		ite	eq
 685 0006 D3F86411 		ldreq	r1, [r3, #356]
 686              	.LBE5:
 687              	.LBE4:
 163:drivers.c     **** 	else servo_SetPos(7, parServo->min);
 688              		.loc 1 163 0
 689 000a D3F86011 		ldrne	r1, [r3, #352]
 690 000e 0720     		movs	r0, #7
 691              	.LVL60:
 692 0010 FFF7FEBF 		b	servo_SetPos
 693              	.LVL61:
 694              	.L80:
 695              		.align	2
 696              	.L79:
 697 0014 00000000 		.word	control
 698              		.cfi_endproc
 699              	.LFE11:
 701              		.section	.text.servo_Parking,"ax",%progbits
 702              		.align	1
 703              		.global	servo_Parking
 704              		.thumb
 705              		.thumb_func
 707              	servo_Parking:
 708              	.LFB10:
 148:drivers.c     **** 	tParServo* parServo;
 709              		.loc 1 148 0
 710              		.cfi_startproc
 711              		@ args = 0, pretend = 0, frame = 0
 712              		@ frame_needed = 0, uses_anonymous_args = 0
 713              	.LVL62:
 714 0000 38B5     		push	{r3, r4, r5, lr}
 715              	.LCFI8:
 716              		.cfi_def_cfa_offset 16
 717              		.cfi_offset 3, -16
 718              		.cfi_offset 4, -12
 719              		.cfi_offset 5, -8
 720              		.cfi_offset 14, -4
 721 0002 0D4D     		ldr	r5, .L84
 150:drivers.c     **** 		parServo = (tParServo*)control.servo[x].par;
 722              		.loc 1 150 0
 723 0004 0024     		movs	r4, #0
 724              	.LVL63:
 725              	.L82:
 152:drivers.c     **** 		servus_SetPos(x+1, control.servo[x].posNew);
 726              		.loc 1 152 0 discriminator 3
 727 0006 D5F8B030 		ldr	r3, [r5, #176]
 728 000a D5F8B410 		ldr	r1, [r5, #180]
 153:drivers.c     **** 		servus_Enable(x+1, 1); // Liga o servo
 729              		.loc 1 153 0 discriminator 3
 730 000e 0134     		adds	r4, r4, #1
 731              	.LVL64:
 152:drivers.c     **** 		servus_SetPos(x+1, control.servo[x].posNew);
 732              		.loc 1 152 0 discriminator 3
 733 0010 1944     		add	r1, r1, r3
 153:drivers.c     **** 		servus_Enable(x+1, 1); // Liga o servo
 734              		.loc 1 153 0 discriminator 3
 735 0012 2046     		mov	r0, r4
 152:drivers.c     **** 		servus_SetPos(x+1, control.servo[x].posNew);
 736              		.loc 1 152 0 discriminator 3
 737 0014 C5F8AC10 		str	r1, [r5, #172]
 153:drivers.c     **** 		servus_Enable(x+1, 1); // Liga o servo
 738              		.loc 1 153 0 discriminator 3
 739 0018 FFF7FEFF 		bl	servus_SetPos
 740              	.LVL65:
 154:drivers.c     **** 	}
 741              		.loc 1 154 0 discriminator 3
 742 001c 0121     		movs	r1, #1
 743 001e 2046     		mov	r0, r4
 744 0020 FFF7FEFF 		bl	servus_Enable
 745              	.LVL66:
 150:drivers.c     **** 		parServo = (tParServo*)control.servo[x].par;
 746              		.loc 1 150 0 discriminator 3
 747 0024 072C     		cmp	r4, #7
 748 0026 05F11C05 		add	r5, r5, #28
 749              	.LVL67:
 750 002a ECD1     		bne	.L82
 158:drivers.c     **** 
 751              		.loc 1 158 0
 752 002c BDE83840 		pop	{r3, r4, r5, lr}
 753              	.LCFI9:
 754              		.cfi_restore 14
 755              		.cfi_restore 5
 756              		.cfi_restore 4
 757              		.cfi_restore 3
 758              		.cfi_def_cfa_offset 0
 759              	.LVL68:
 157:drivers.c     **** }
 760              		.loc 1 157 0
 761 0030 0020     		movs	r0, #0
 762 0032 FFF7FEBF 		b	servo_Hand
 763              	.LVL69:
 764              	.L85:
 765 0036 00BF     		.align	2
 766              	.L84:
 767 0038 00000000 		.word	control
 768              		.cfi_endproc
 769              	.LFE10:
 771              		.section	.text.servo_Init,"ax",%progbits
 772              		.align	1
 773              		.global	servo_Init
 774              		.thumb
 775              		.thumb_func
 777              	servo_Init:
 778              	.LFB6:
  66:drivers.c     **** 	servo_Parking();
 779              		.loc 1 66 0
 780              		.cfi_startproc
 781              		@ args = 0, pretend = 0, frame = 0
 782              		@ frame_needed = 0, uses_anonymous_args = 0
 783              		@ link register save eliminated.
  67:drivers.c     **** }
 784              		.loc 1 67 0
 785 0000 FFF7FEBF 		b	servo_Parking
 786              	.LVL70:
 787              		.cfi_endproc
 788              	.LFE6:
 790              		.global	servosTick
 791              		.comm	control,424,4
 792              		.section	.rodata.str1.1,"aMS",%progbits,1
 793              	.LC0:
 794 0000 6F6E4B65 		.ascii	"onKeyDown key [0x%x]\012\000"
 794      79446F77 
 794      6E206B65 
 794      79205B30 
 794      7825785D 
 795              	.LC1:
 796 0016 6F6E4B65 		.ascii	"onKeyPress key [0x%x] fastInc[%d] \012\000"
 796      79507265 
 796      7373206B 
 796      6579205B 
 796      30782578 
 797              	.LC2:
 798 003a 6F6E4B65 		.ascii	"onKeyUp key [0x%x] fastInc[%d] \012\000"
 798      79557020 
 798      6B657920 
 798      5B307825 
 798      785D2066 
 799              		.section	.bss.servosTick,"aw",%nobits
 800              		.align	2
 803              	servosTick:
 804 0000 00000000 		.space	4
 805              		.text
 806              	.Letext0:
 807              		.file 2 "uc_libc_dev/_libdef/uc_libdefs.h"
 808              		.file 3 "app.h"
 809              		.file 4 "uc_libc_dev/keyboard/gkey.h"
 810              		.file 5 "uc_libc_dev/stdio/stdio_uc.h"
 811              		.file 6 "uc_libc_dev/sound/beep/beep.h"
 812              		.file 7 "uc_libc_dev/motors/servus.h"
DEFINED SYMBOLS
                            *ABS*:00000000 drivers.c
D:\_temp\_windows\cch7BhOR.s:20     .text.onKeyDown:00000000 $t
D:\_temp\_windows\cch7BhOR.s:25     .text.onKeyDown:00000000 onKeyDown
D:\_temp\_windows\cch7BhOR.s:84     .text.onKeyDown:00000030 $d
D:\_temp\_windows\cch7BhOR.s:89     .text.onKeyPress:00000000 $t
D:\_temp\_windows\cch7BhOR.s:94     .text.onKeyPress:00000000 onKeyPress
D:\_temp\_windows\cch7BhOR.s:114    .text.onKeyPress:00000010 $d
D:\_temp\_windows\cch7BhOR.s:120    .text.onKeyUp:00000000 $t
D:\_temp\_windows\cch7BhOR.s:125    .text.onKeyUp:00000000 onKeyUp
D:\_temp\_windows\cch7BhOR.s:145    .text.onKeyUp:00000010 $d
D:\_temp\_windows\cch7BhOR.s:151    .text.relay_Init:00000000 $t
D:\_temp\_windows\cch7BhOR.s:156    .text.relay_Init:00000000 relay_Init
D:\_temp\_windows\cch7BhOR.s:187    .text.relay_Init:00000028 $d
                            *COM*:000001a8 control
D:\_temp\_windows\cch7BhOR.s:193    .text.relay_Set:00000000 $t
D:\_temp\_windows\cch7BhOR.s:198    .text.relay_Set:00000000 relay_Set
D:\_temp\_windows\cch7BhOR.s:245    .text.relay_Set:00000028 $d
D:\_temp\_windows\cch7BhOR.s:251    .text.relay_Tick:00000000 $t
D:\_temp\_windows\cch7BhOR.s:256    .text.relay_Tick:00000000 relay_Tick
D:\_temp\_windows\cch7BhOR.s:332    .text.relay_Tick:00000074 $d
D:\_temp\_windows\cch7BhOR.s:339    .text.servo_Config:00000000 $t
D:\_temp\_windows\cch7BhOR.s:344    .text.servo_Config:00000000 servo_Config
D:\_temp\_windows\cch7BhOR.s:468    .text.servo_Config:0000008c $d
D:\_temp\_windows\cch7BhOR.s:474    .text.servo_Offset:00000000 $t
D:\_temp\_windows\cch7BhOR.s:479    .text.servo_Offset:00000000 servo_Offset
D:\_temp\_windows\cch7BhOR.s:538    .text.servo_Offset:00000038 $d
D:\_temp\_windows\cch7BhOR.s:544    .text.servo_SetPos:00000000 $t
D:\_temp\_windows\cch7BhOR.s:549    .text.servo_SetPos:00000000 servo_SetPos
D:\_temp\_windows\cch7BhOR.s:658    .text.servo_SetPos:0000007c $d
D:\_temp\_windows\cch7BhOR.s:665    .text.servo_Hand:00000000 $t
D:\_temp\_windows\cch7BhOR.s:670    .text.servo_Hand:00000000 servo_Hand
D:\_temp\_windows\cch7BhOR.s:697    .text.servo_Hand:00000014 $d
D:\_temp\_windows\cch7BhOR.s:702    .text.servo_Parking:00000000 $t
D:\_temp\_windows\cch7BhOR.s:707    .text.servo_Parking:00000000 servo_Parking
D:\_temp\_windows\cch7BhOR.s:767    .text.servo_Parking:00000038 $d
D:\_temp\_windows\cch7BhOR.s:772    .text.servo_Init:00000000 $t
D:\_temp\_windows\cch7BhOR.s:777    .text.servo_Init:00000000 servo_Init
D:\_temp\_windows\cch7BhOR.s:803    .bss.servosTick:00000000 servosTick
D:\_temp\_windows\cch7BhOR.s:800    .bss.servosTick:00000000 $d
                     .debug_frame:00000010 $d

UNDEFINED SYMBOLS
rprintf
beep_Play
gkey_FastInc
flash_Save
servus_SetPos
servus_Enable
